#include<cstdio>
#include<algorithm>
using namespace std;
#define N 300500
#define mod 998244353
#define ll long long
namespace IO{
	const int sz=1<<20;
	char a[sz+5],b[sz+5],*p1=a,*p2=a,*t=b,p[105];
	inline char gc(){
		return p1==p2?(p2=(p1=a)+fread(a,1,sz,stdin),p1==p2?EOF:*p1++):*p1++;
	}
	template<class T> void gi(T& x){
		x=0; char c=gc();
		for(;c<'0'||c>'9';c=gc());
		for(;c>='0'&&c<='9';c=gc())
			x=x*10+(c-'0');
	}
	inline void flush(){fwrite(b,1,t-b,stdout),t=b; }
	inline void pc(char x){*t++=x; if(t-b==sz) flush(); }
	template<class T> void pi(T x,char c='\n'){
		if(x==0) pc('0'); int t=0;
		for(;x;x/=10) p[++t]=x%10+'0';
		for(;t;--t) pc(p[t]); pc(c);
	}
	struct F{~F(){flush();}}f; 
}
using IO::gi;
using IO::pi;

int n,k,q,p[N],s[N][2],ct,as[N];
ll v1,v2,d1[N],d2[N];
int pw(int a,int p){int as=1;while(p){if(p&1)as=1ll*as*a%mod;a=1ll*a*a%mod;p>>=1;}return as;}
struct BIT{
	ll tr[N];
	void add(int x,int k){for(int i=x;i<=n;i+=i&-i)tr[i]+=k;}
	ll que(int x){ll as=0;for(int i=x;i;i-=i&-i)as+=tr[i];return as;}
}tr1,tr2,tr;
struct sth{int ty,d,x,y;}q1[N*9],q2[N*9];
void solve(int l,int r)
{
	if(l==r)return;
	int mid=(l+r)>>1;
	solve(l,mid);solve(mid+1,r);
	int l1=l,r1=mid+1;
	for(int i=l;i<=r;i++)
	{
		int fg=0;
		if(l1==mid+1)fg=1;
		else if(r1==r+1)fg=0;
		else if(q1[l1].x<=q1[r1].x)fg=0;
		else fg=1;
		if(!fg)
		{
			if(!q1[l1].ty)tr.add(q1[l1].y,q1[l1].d);
			q2[i]=q1[l1++];
		}
		else
		{
			if(q1[r1].ty)d1[q1[r1].d]+=q1[r1].ty*tr.que(q1[r1].y);
			q2[i]=q1[r1++];
		}
	}
	for(int i=l;i<=mid;i++)if(!q1[i].ty)tr.add(q1[i].y,-q1[i].d);
	for(int i=l;i<=r;i++)q1[i]=q2[i];
}
struct mat{int v[3][3];mat(){for(int i=0;i<3;i++)for(int j=0;j<3;j++)v[i][j]=0;}}si,ti;
mat operator *(mat a,mat b){mat c;for(int i=0;i<3;i++)for(int j=0;j<3;j++)for(int k=0;k<3;k++)c.v[i][j]=(c.v[i][j]+1ll*a.v[i][k]*b.v[k][j])%mod;return c;}
mat pw(mat a,int p){mat as;for(int i=0;i<3;i++)as.v[i][i]=1;while(p){if(p&1)as=as*a;a=a*a;p>>=1;}return as;}
void init(int v)
{
	ti.v[0][0]=(mod+1ll*n*(n-5)/2)%mod;ti.v[0][1]=2;
	ti.v[1][1]=(mod+1ll*n*(n-3)/2)%mod;
	ti.v[2][0]=n;ti.v[2][1]=mod-1;ti.v[2][2]=1ll*n*(n-1)/2%mod;
	si=pw(ti,v);
}
int main()
{
	freopen("random.in","r",stdin);
	freopen("random.out","w",stdout);
	gi(n);gi(k);gi(q);
	for(int i=1;i<=n;i++)gi(p[i]);
	for(int i=1;i<=q;i++)gi(s[i][0]),gi(s[i][1]);
	for(int i=1;i<=n;i++)
	{
		v1+=tr1.que(n)-tr1.que(p[i]);v2+=1ll*i*(tr1.que(n)-tr1.que(p[i]))-(tr2.que(n)-tr2.que(p[i]));
		tr1.add(p[i],1);tr2.add(p[i],i);
		q1[++ct]=(sth){0,1,i,p[i]};
	}
	for(int i=1;i<=q;i++)
	{
		int u=s[i][0],v=s[i][1];
		if((u<v)^(p[u]>p[v]))d1[i]--;else d1[i]++;
		d2[i]+=1ll*(u-v)*(p[u]-p[v]);
		q1[++ct]=(sth){2,i,u-1,p[u]-1};q1[++ct]=(sth){2,i,v-1,p[v]-1};
		q1[++ct]=(sth){0,-1,u,p[u]};q1[++ct]=(sth){0,-1,v,p[v]};
		swap(p[u],p[v]);
		q1[++ct]=(sth){0,1,u,p[u]};q1[++ct]=(sth){0,1,v,p[v]};
		q1[++ct]=(sth){-2,i,u-1,p[u]-1};q1[++ct]=(sth){-2,i,v-1,p[v]-1};
	}
	solve(1,ct);
	d1[0]=v1;d2[0]=v2;
	for(int i=1;i<=q;i++)d1[i]+=d1[i-1],d2[i]+=d2[i-1];
	init(k-q);
	for(int i=q;i>=0;i--)
	{
		int v1=(1ll*n*(n-1)/2-2*d1[i]%mod+mod)%mod,v2=(1ll*(n+1)*n*(n-1)/6-2*d2[i]%mod+mod)%mod;
		as[i]=(1ll*d1[i]%mod*si.v[2][2]+1ll*v1*si.v[2][0]+1ll*v2*si.v[2][1])%mod;
		as[i]=1ll*as[i]*pw(si.v[2][2],mod-2)%mod;
		si=si*ti;
	}
	for(int i=0;i<=q;i++)pi(as[i]);
}
